﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _7_Agent
{
    class Program
    {
        /*
         * 代理模式:为其他对象提供一种代理以控制对这个对象的访问
         * 
         * 应用：
               1、远程代理，为一个对象在不同的地址空间提供局部代表。可以隐藏一个对象存在于不同地址空间的事实。
               2、虚拟代理，根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。(如大的HTML网页)
               3、安全代理，用来控制真实对象访问时的权限。一般不同的对象有不同的访问权限。
               4、智能指引，是指当调用真实的对象时，代理处理另外一些事。
                    * 计算真实对象的引用次数。这样当该对象没有引用时，可以自动释放它;
                    * 当第一次引用一个持久对象时，将它装入内存；
                    * 访问一个实际对象前，检查是否已经锁定它，以确保其它对象不能改变它。
                  都是通过代理在访问一个对象时附加一些内务处理。
           
            代理模式就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途.

         */
        static void Main(string[] args)
        {
            Proxy proxy = new Proxy();
            proxy.Request();
            Console.Read();
        }
    }
}
